/* Processed by ecpg (regression mode) */
/* These include files are added by the preprocessor */
#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
/* Needed for informix compatibility */
#include <ecpg_informix.h>
/* End of automatic include section */
#define ECPGdebug(X, Y) ECPGdebug((X) + 100, (Y))

#line 1 "describe.pgc"
#include <stdlib.h>
#include <string.h>

#line 1 "regression.h"

#line 4 "describe.pgc"

#line 1 "sqlda.h"
#ifndef ECPG_SQLDA_H
#define ECPG_SQLDA_H

#ifdef _ECPG_INFORMIX_H

#include "sqlda-compat.h"
typedef struct sqlvar_compat sqlvar_t;
typedef struct sqlda_compat sqlda_t;

#else

#include "sqlda-native.h"
typedef struct sqlvar_struct sqlvar_t;
typedef struct sqlda_struct sqlda_t;

#endif

#endif /* ECPG_SQLDA_H */

#line 5 "describe.pgc"

/* exec sql whenever sqlerror  stop ; */
#line 7 "describe.pgc"

sqlda_t *sqlda1, *sqlda2, *sqlda3;

int main(void)
{
    /* exec sql begin declare section */

#line 15 "describe.pgc"
    char* stmt1 = "SELECT id, t FROM descr_t1";

#line 16 "describe.pgc"
    char* stmt2 = "SELECT id, t FROM descr_t1 WHERE id = -1";

#line 17 "describe.pgc"
    int i, count1, count2;

#line 18 "describe.pgc"
    char field_name1[30] = "not set";

#line 19 "describe.pgc"
    char field_name2[30] = "not set";
/* exec sql end declare section */
#line 20 "describe.pgc"

    char msg[128];

    ECPGdebug(1, stderr);

    strcpy(msg, "connect");
    {
        ECPGconnect(__LINE__, 1, "regress1", NULL, NULL, NULL, 0);
#line 27 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 27 "describe.pgc"

    strcpy(msg, "set");
    {
        ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "set datestyle to iso", ECPGt_EOIT, ECPGt_EORT);
#line 30 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 30 "describe.pgc"

    strcpy(msg, "create");
    {
        ECPGdo(__LINE__,
            1,
            1,
            NULL,
            0,
            ECPGst_normal,
            "create table descr_t1 ( id serial primary key , t text )",
            ECPGt_EOIT,
            ECPGt_EORT);
#line 33 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 33 "describe.pgc"

    strcpy(msg, "insert");
    {
        ECPGdo(__LINE__,
            1,
            1,
            NULL,
            0,
            ECPGst_normal,
            "insert into descr_t1 ( id , t ) values ( default , 'a' )",
            ECPGt_EOIT,
            ECPGt_EORT);
#line 36 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 36 "describe.pgc"

    {
        ECPGdo(__LINE__,
            1,
            1,
            NULL,
            0,
            ECPGst_normal,
            "insert into descr_t1 ( id , t ) values ( default , 'b' )",
            ECPGt_EOIT,
            ECPGt_EORT);
#line 37 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 37 "describe.pgc"

    {
        ECPGdo(__LINE__,
            1,
            1,
            NULL,
            0,
            ECPGst_normal,
            "insert into descr_t1 ( id , t ) values ( default , 'c' )",
            ECPGt_EOIT,
            ECPGt_EORT);
#line 38 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 38 "describe.pgc"

    {
        ECPGdo(__LINE__,
            1,
            1,
            NULL,
            0,
            ECPGst_normal,
            "insert into descr_t1 ( id , t ) values ( default , 'd' )",
            ECPGt_EOIT,
            ECPGt_EORT);
#line 39 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 39 "describe.pgc"

    strcpy(msg, "commit");
    {
        ECPGtrans(__LINE__, NULL, "commit");
#line 42 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 42 "describe.pgc"

    /*
     * Test DESCRIBE with a query producing tuples.
     * DESCRIPTOR and SQL DESCRIPTOR are NOT the same in
     * Informix-compat mode.
     */

    strcpy(msg, "allocate");
    ECPGallocate_desc(__LINE__, "desc1");
#line 51 "describe.pgc"

    if (sqlca.sqlcode < 0)
        exit(1);
#line 51 "describe.pgc"

    ECPGallocate_desc(__LINE__, "desc2");
#line 52 "describe.pgc"

    if (sqlca.sqlcode < 0)
        exit(1);
#line 52 "describe.pgc"

    strcpy(msg, "prepare");
    {
        ECPGprepare(__LINE__, NULL, 0, "st_id1", stmt1);
#line 55 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 55 "describe.pgc"

    sqlda1 = sqlda2 = sqlda3 = NULL;

    strcpy(msg, "describe");
    {
        ECPGdescribe(__LINE__,
            1,
            0,
            NULL,
            "st_id1",
            ECPGt_descriptor,
            "desc1",
            0L,
            0L,
            0L,
            ECPGt_NO_INDICATOR,
            NULL,
            0L,
            0L,
            0L,
            ECPGt_EORT);
    }
#line 60 "describe.pgc"

    {
        ECPGdescribe(__LINE__,
            1,
            0,
            NULL,
            "st_id1",
            ECPGt_descriptor,
            "desc2",
            0L,
            0L,
            0L,
            ECPGt_NO_INDICATOR,
            NULL,
            0L,
            0L,
            0L,
            ECPGt_EORT);
    }
#line 61 "describe.pgc"

    {
        ECPGdescribe(__LINE__,
            1,
            0,
            NULL,
            "st_id1",
            ECPGt_sqlda,
            &sqlda1,
            0L,
            0L,
            0L,
            ECPGt_NO_INDICATOR,
            NULL,
            0L,
            0L,
            0L,
            ECPGt_EORT);
    }
#line 63 "describe.pgc"

    {
        ECPGdescribe(__LINE__,
            1,
            0,
            NULL,
            "st_id1",
            ECPGt_sqlda,
            &sqlda2,
            0L,
            0L,
            0L,
            ECPGt_NO_INDICATOR,
            NULL,
            0L,
            0L,
            0L,
            ECPGt_EORT);
    }
#line 64 "describe.pgc"

    {
        ECPGdescribe(__LINE__,
            1,
            0,
            NULL,
            "st_id1",
            ECPGt_sqlda,
            &sqlda3,
            0L,
            0L,
            0L,
            ECPGt_NO_INDICATOR,
            NULL,
            0L,
            0L,
            0L,
            ECPGt_EORT);
    }
#line 65 "describe.pgc"

    if (sqlda1 == NULL) {
        printf("sqlda1 NULL\n");
        exit(1);
    }

    if (sqlda2 == NULL) {
        printf("sqlda2 NULL\n");
        exit(1);
    }

    if (sqlda3 == NULL) {
        printf("sqlda3 NULL\n");
        exit(1);
    }

    strcpy(msg, "get descriptor");
    {
        ECPGget_desc_header(__LINE__, "desc1", &(count1));

#line 86 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 86 "describe.pgc"

    {
        ECPGget_desc_header(__LINE__, "desc1", &(count2));

#line 87 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 87 "describe.pgc"

    if (count1 != count2) {
        printf("count1 (%d) != count2 (%d)\n", count1, count2);
        exit(1);
    }

    if (count1 != sqlda1->sqld) {
        printf("count1 (%d) != sqlda1->sqld (%d)\n", count1, sqlda1->sqld);
        exit(1);
    }

    if (count1 != sqlda2->sqld) {
        printf("count1 (%d) != sqlda2->sqld (%d)\n", count1, sqlda2->sqld);
        exit(1);
    }

    if (count1 != sqlda3->sqld) {
        printf("count1 (%d) != sqlda3->sqld (%d)\n", count1, sqlda3->sqld);
        exit(1);
    }

    for (i = 1; i <= count1; i++) {
        {
            ECPGget_desc(__LINE__,
                "desc1",
                i,
                ECPGd_name,
                ECPGt_char,
                (field_name1),
                (long)30,
                (long)1,
                (30) * sizeof(char),
                ECPGd_EODT);

#line 115 "describe.pgc"

            if (sqlca.sqlcode < 0)
                exit(1);
        }
#line 115 "describe.pgc"

        {
            ECPGget_desc(__LINE__,
                "desc2",
                i,
                ECPGd_name,
                ECPGt_char,
                (field_name2),
                (long)30,
                (long)1,
                (30) * sizeof(char),
                ECPGd_EODT);

#line 116 "describe.pgc"

            if (sqlca.sqlcode < 0)
                exit(1);
        }
#line 116 "describe.pgc"

        printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
               "sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
            i,
            field_name1,
            field_name2,
            sqlda1->sqlvar[i - 1].sqlname,
            sqlda2->sqlvar[i - 1].sqlname,
            sqlda3->sqlvar[i - 1].sqlname);
    }

    strcpy(msg, "deallocate");
    ECPGdeallocate_desc(__LINE__, "desc1");
#line 126 "describe.pgc"

    if (sqlca.sqlcode < 0)
        exit(1);
#line 126 "describe.pgc"

    ECPGdeallocate_desc(__LINE__, "desc2");
#line 127 "describe.pgc"

    if (sqlca.sqlcode < 0)
        exit(1);
#line 127 "describe.pgc"

    free(sqlda1);
    free(sqlda2);
    free(sqlda3);

    {
        ECPGdeallocate(__LINE__, 1, NULL, "st_id1");
#line 132 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 132 "describe.pgc"

    /* Test DESCRIBE with a query not producing tuples */

    strcpy(msg, "allocate");
    ECPGallocate_desc(__LINE__, "desc1");
#line 137 "describe.pgc"

    if (sqlca.sqlcode < 0)
        exit(1);
#line 137 "describe.pgc"

    ECPGallocate_desc(__LINE__, "desc2");
#line 138 "describe.pgc"

    if (sqlca.sqlcode < 0)
        exit(1);
#line 138 "describe.pgc"

    strcpy(msg, "prepare");
    {
        ECPGprepare(__LINE__, NULL, 0, "st_id2", stmt2);
#line 141 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 141 "describe.pgc"

    sqlda1 = sqlda2 = sqlda3 = NULL;

    strcpy(msg, "describe");
    {
        ECPGdescribe(__LINE__,
            1,
            0,
            NULL,
            "st_id2",
            ECPGt_descriptor,
            "desc1",
            0L,
            0L,
            0L,
            ECPGt_NO_INDICATOR,
            NULL,
            0L,
            0L,
            0L,
            ECPGt_EORT);
    }
#line 146 "describe.pgc"

    {
        ECPGdescribe(__LINE__,
            1,
            0,
            NULL,
            "st_id2",
            ECPGt_descriptor,
            "desc2",
            0L,
            0L,
            0L,
            ECPGt_NO_INDICATOR,
            NULL,
            0L,
            0L,
            0L,
            ECPGt_EORT);
    }
#line 147 "describe.pgc"

    {
        ECPGdescribe(__LINE__,
            1,
            0,
            NULL,
            "st_id2",
            ECPGt_sqlda,
            &sqlda1,
            0L,
            0L,
            0L,
            ECPGt_NO_INDICATOR,
            NULL,
            0L,
            0L,
            0L,
            ECPGt_EORT);
    }
#line 149 "describe.pgc"

    {
        ECPGdescribe(__LINE__,
            1,
            0,
            NULL,
            "st_id2",
            ECPGt_sqlda,
            &sqlda2,
            0L,
            0L,
            0L,
            ECPGt_NO_INDICATOR,
            NULL,
            0L,
            0L,
            0L,
            ECPGt_EORT);
    }
#line 150 "describe.pgc"

    {
        ECPGdescribe(__LINE__,
            1,
            0,
            NULL,
            "st_id2",
            ECPGt_sqlda,
            &sqlda3,
            0L,
            0L,
            0L,
            ECPGt_NO_INDICATOR,
            NULL,
            0L,
            0L,
            0L,
            ECPGt_EORT);
    }
#line 151 "describe.pgc"

    if (sqlda1 == NULL || sqlda1 == NULL || sqlda2 == NULL)
        exit(1);

    strcpy(msg, "get descriptor");
    {
        ECPGget_desc_header(__LINE__, "desc1", &(count1));

#line 157 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 157 "describe.pgc"

    {
        ECPGget_desc_header(__LINE__, "desc1", &(count2));

#line 158 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 158 "describe.pgc"

    if (!(count1 == count2 && count1 == sqlda1->sqld && count1 == sqlda2->sqld && count1 == sqlda3->sqld))
        exit(1);

    for (i = 1; i <= count1; i++) {
        {
            ECPGget_desc(__LINE__,
                "desc1",
                i,
                ECPGd_name,
                ECPGt_char,
                (field_name1),
                (long)30,
                (long)1,
                (30) * sizeof(char),
                ECPGd_EODT);

#line 168 "describe.pgc"

            if (sqlca.sqlcode < 0)
                exit(1);
        }
#line 168 "describe.pgc"

        {
            ECPGget_desc(__LINE__,
                "desc2",
                i,
                ECPGd_name,
                ECPGt_char,
                (field_name2),
                (long)30,
                (long)1,
                (30) * sizeof(char),
                ECPGd_EODT);

#line 169 "describe.pgc"

            if (sqlca.sqlcode < 0)
                exit(1);
        }
#line 169 "describe.pgc"

        printf("%d\n\tfield_name1 '%s'\n\tfield_name2 '%s'\n\t"
               "sqlda1 '%s'\n\tsqlda2 '%s'\n\tsqlda3 '%s'\n",
            i,
            field_name1,
            field_name2,
            sqlda1->sqlvar[i - 1].sqlname,
            sqlda2->sqlvar[i - 1].sqlname,
            sqlda3->sqlvar[i - 1].sqlname);
    }

    strcpy(msg, "deallocate");
    ECPGdeallocate_desc(__LINE__, "desc1");
#line 179 "describe.pgc"

    if (sqlca.sqlcode < 0)
        exit(1);
#line 179 "describe.pgc"

    ECPGdeallocate_desc(__LINE__, "desc2");
#line 180 "describe.pgc"

    if (sqlca.sqlcode < 0)
        exit(1);
#line 180 "describe.pgc"

    free(sqlda1);
    free(sqlda2);
    free(sqlda3);

    {
        ECPGdeallocate(__LINE__, 1, NULL, "st_id2");
#line 185 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 185 "describe.pgc"

    /* End test */

    strcpy(msg, "drop");
    {
        ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "drop table descr_t1", ECPGt_EOIT, ECPGt_EORT);
#line 190 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 190 "describe.pgc"

    strcpy(msg, "commit");
    {
        ECPGtrans(__LINE__, NULL, "commit");
#line 193 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 193 "describe.pgc"

    strcpy(msg, "disconnect");
    {
        ECPGdisconnect(__LINE__, "CURRENT");
#line 196 "describe.pgc"

        if (sqlca.sqlcode < 0)
            exit(1);
    }
#line 196 "describe.pgc"

    return (0);
}
